JavaScript(用户端动态脚本)之在代码中做决定

您所在的位置:网站首页 元编程 js JavaScript(用户端动态脚本)之在代码中做决定

JavaScript(用户端动态脚本)之在代码中做决定

#JavaScript(用户端动态脚本)之在代码中做决定| 来源: 网络整理| 查看: 265

在任何的编程语言中,代码需要依靠不同的输入作出决定并且采取行动。例如,在游戏中,如果玩家的生命值变成了 0,那么游戏就结束了。在天气应用中,如果在早晨运行,就显示一张日出的图片;如果在晚上,就显示星星和月亮的图片。在这篇文章中,我们将探索在 JavaScript 中所谓的条件语句是怎样工作的。

只需一个条件你就可以拥有……!

人类(以及其他的动物)无时无刻不在做决定,这些决定都影响着他们的生活,从小事(“我应该吃一片还是两片饼干”)到重要的大事(“我应该留在我的祖国,在我父亲的农场工作;还是应该去美国学习天体物理学”)。

条件语句结构允许我们来描述在 JavaScript 中这样的选择,从不得不作出的选择(例如:“一片还是两片”)到产生的结果或这些选择(也许是“吃一片饼干”可能会“仍然感觉饿”,或者是“吃两片饼干”可能会“感觉饱了,但妈妈会因为我吃掉了所有的饼干而骂我”。)

if ... else 语句

让我们看看到目前为止你将会在 JavaScript 中用到的最常见的条件语句类型 — if ... else 语句。

基本的的 if…else 语法

基本的 if…else 语法看起来像下面的 伪代码:

if (condition) { code to run if condition is true } else { run some other code instead }

在这里我们有:

关键字 if,并且后面跟随括号。 要测试的条件,放到括号里(通常是“这个值大于另一个值吗”或者“这个值存在吗”)。这个条件会利用比较运算符(我们会在最后的模块中讨论)进行比较,并且返回 true 或者 false。 一组花括号,在里面我们有一些代码——可以是任何我们喜欢的代码,并且只会在条件语句返回 true 的时候运行。 关键字 else。 另一组花括号,在里面我们有一些代码——可以是任何我们喜欢的代码,并且当条件语句返回值不是 true 的话,它才会运行。

这段代码真的非常易懂——它说“**如果(if)条件(condition)**返回 true,运行代码 A,**否则(else)**运行代码 B”

注意:你不一定需要 else 和第二个花括号——下面的代码也是符合语法规则的:

if (condition) { code to run if condition is true } run some other code

不过,这里你需要注意——在这种情况下,第二段代码不被条件语句控制,所以它总会运行,不管条件返回的是 true 还是 false。这不一定是一件坏事,但这可能不是你想要的——你经常只想要运行一段代码或者另一段,而不是两个都运行。

最后,有时候你可能会看到 if…else 语句没有写花括号,像下面的速记风格:

if (condition) code to run if condition is true else run some other code instead

这是完全有效的代码,但不建议这样使用——因为如果有花括号进行代码切割的话,整体代码被切割为多行代码,更易读和易用。

一个真实的例子

为了更好的理解这种语法,让我们考虑一个真实的例子。想像一个孩子被他的父母要求帮助他们做家务。父母可能会说“嗨,宝贝儿,如果你帮我去购物,我会给你额外的零花钱,这样你就能买得起你想要的玩具了。”在 JavaScript 中,我们可以这样表示:

var shoppingDone = false; if (shoppingDone === true) { var childsAllowance = 10; } else { var childsAllowance = 5; }

这段代码显示的结果是变量 shoppingDone 总是返回 false,意味着对我们的穷孩子来说很失望。如果孩子去购物的话,就需要依靠我们提供机制来使父母把变量 shoppingDone 变成 true。

❗️备注: 你可以看到在Github 上这个例子的完整版本(也可以在线运行)

else if

最后一个例子提供给我们两个选择或结果,但是如果我们想要两个以上呢?

有一种方法来让你的 if…else 连接你的额外的选择和结果——使用 else if。每一个额外的选择要求放到 if() { ... } 和 else { ... } 里——看看下面更多涉及到的例子,它们属于一个普通的天气预报的应用的一部分。

Select the weather type today: --Make a choice-- Sunny Rainy Snowing Overcast var select = document.querySelector('select'); var para = document.querySelector('p'); select.addEventListener('change', setWeather); function setWeather() { var choice = select.value; if (choice === 'sunny') { para.textContent = 'It is nice and sunny outside today. Wear shorts! Go to the beach, or the park, and get an ice cream.'; } else if (choice === 'rainy') { para.textContent = 'Rain is falling outside; take a rain coat and a brolly, and don\'t stay out for too long.'; } else if (choice === 'snowing') { para.textContent = 'The snow is coming down — it is freezing! Best to stay in with a cup of hot chocolate, or go build a snowman.'; } else if (choice === 'overcast') { para.textContent = 'It isn\'t raining, but the sky is grey and gloomy; it could turn any minute, so take a rain coat just in case.'; } else { para.textContent = ''; } } 这里我们有 HTML  元素让我们选择不同的天气,以及一个简单的段落。 在 JavaScript 中,我们同时存储了对  和 

 的引用,并对  添加了一个事件监听器,因此,当它的值改变时,setWeather()函数被执行。 当函数运行时,我们首先新建了一个 choice 变量去存储当前被选的  中的值。接着我们用条件判断语句根据 choice 的值选择性的展示段落中的文本。注意 else if() {...} 段中的条件是怎么被判断的,除了第一个,它是在 if() {...} 中被判断的。 最后一个 else {...} 中的选择通常被叫做“最后招数” — 在所有的条件都不为 true 时其中的代码会被执行。在这个例子中,如果用户没有选择任何一个选项,它会将段落中的文本清空,例如当用户决定重新选择最开始出现的"--Make a choice--"选项时,就会有这样的效果。

❗️备注: 你可以 在 GitHub 上找到这个例子 (也可以在线运行。)

关于比较运算符

比较运算符是用来判断条件语句中的条件的。我们先回过头来看看Basic math in JavaScript — numbers and operators 文章中的比较运算符。我们有如下选择:

=== 和 !== — 判断一个值是否严格等于,或不等于另一个。  — 判断一个值是否小于,或大于另一个。 = — 判断一个值是否小于或等于,或者大于或等于另一个。

❗️备注: 如果你想复习这些内容,可以回顾之前链接上的材料。

我们想特别提到测试布尔值(true / false),和一个通用模式,你会频繁遇到它,任何不是 false, undefined, null, 0, NaN 的值,或一个空字符串('')在作为条件语句进行测试时实际返回 true,因此您可以简单地使用变量名称来测试它是否为真,甚至是否存在(即它不是未定义的)。例如:

var cheese = 'Cheddar'; if (cheese) { console.log('Yay! Cheese available for making cheese on toast.'); } else { console.log('No cheese on toast for you today.'); }

而且,回到我们以前关于孩子为自己的父母做家务的例子,你可以这样写:

var shoppingDone = false; if (shoppingDone) { // don't need to explicitly specify '=== true' var childsAllowance = 10; } else { var childsAllowance = 5; } 嵌套 if ... else

将另一个 if ... else 语句放在另一个中 - 嵌套它是完全可行的。例如,我们可以更新我们的天气预报应用程序,以显示更多的选择,具体取决于温度:

if (choice === 'sunny') { if (temperature < 86) { para.textContent = 'It is ' + temperature + ' degrees outside — nice and sunny. Let\'s go out to the beach, or the park, and get an ice cream.'; } else if (temperature >= 86) { para.textContent = 'It is ' + temperature + ' degrees outside — REALLY HOT! If you want to go outside, make sure to put some suncream on.'; } }

即使代码全部一起工作,每个 if ... else 语句完全独立于另一个。

逻辑运算符:&& , || 和 !

如果要测试多个条件,而不需要编写嵌套 if ... else 语句,逻辑运算符可以帮助您。当在条件下使用时,前两个执行以下操作:

&& — 逻辑与; 使得并列两个或者更多的表达式成为可能,只有当这些表达式每一个都返回true时,整个表达式才会返回true. || — 逻辑或; 当两个或者更多表达式当中的任何一个返回 true 则整个表达式将会返回 true. ! — 逻辑非; 对一个布尔值取反,非 true 返回 false,非 false 返回 true.

举一个逻辑 && 的例子,刚才的那段代码片段可以写成下面这样:

if (choice === 'sunny' && temperature < 86) { para.textContent = 'It is ' + temperature + ' degrees outside — nice and sunny. Let\'s go out to the beach, or the park, and get an ice cream.'; } else if (choice === 'sunny' && temperature >= 86) { para.textContent = 'It is ' + temperature + ' degrees outside — REALLY HOT! If you want to go outside, make sure to put some suncream on.'; }

所以,只有当choice === 'sunny'并且temperature < 86都返回true时,第一个代码块才能运行。

让我们快速看一个 || 的例子:

if (iceCreamVanOutside || houseStatus === 'on fire') { console.log('You should leave the house quickly.'); } else { console.log('Probably should just stay in then.'); }

最后一种类型的逻辑运算符, 逻辑非! 运算符表示,可以用于对一个表达式取否。让我们把非运算符结合上一个例子里的或表达式看看:

if (!(iceCreamVanOutside || houseStatus === 'on fire')) { console.log('Probably should just stay in then.'); } else { console.log('You should leave the house quickly.'); }

在这一段代码中,如果逻辑或所在的语句返回 true,则非运算符会将其取否,于是整个表达式的返回值将会是false。

您可以在任何结构中随意合并很多个逻辑表达式。接下来的例子将会只在或运算符两边的语句同时返回 true 时才会执行代码,这也就意味着整个与运算符语句将会返回 true:

if ((x === 5 || y > 3 || z


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3